package com.fhzn.auth.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fhzn.auth.entity.Resource;
import com.fhzn.auth.entity.Role;
import com.fhzn.auth.entity.User;
import com.fhzn.auth.web.request.RoleOpRequest;
import com.fhzn.auth.web.request.RoleQueryRequest;
import com.fhzn.auth.web.request.RoleResourceRequest;
import com.fhzn.auth.web.request.RoleUserRequest;
import com.fhzn.auth.web.vo.RoleVO;

/**
 * @author 老顾
 * @apiNote
 * @since 2023/12/25
 */
public interface RoleService extends IService<Role> {

    /**
     * 判断是否超级管理员或管理员
     *
     * @param handler 用户昵称
     * @param appCode 应用编码
     * @return true/false
     */
    boolean isSuperAdminOrAdmin(String handler, String appCode);

    /**
     * 角色分页查询
     *
     * @param request 请求参数
     * @return 分页结果
     */
    Page<Role> roleWithPage(RoleQueryRequest request);

    /**
     * 新增角色
     *
     * @param request 请求参数
     * @return 新建角色信息
     */
    RoleVO add(RoleOpRequest request);

    /**
     * 更新角色
     *
     * @param request 请求参数
     * @return true/false
     */
    String update(RoleOpRequest request);

    /**
     * 获取角色关联的用户列表
     *
     * @param request 请求参数
     * @return 分页结果
     */
    Page<User> pageQueryAssignedUsers(RoleQueryRequest request);

    /**
     * 绑定用户到角色
     *
     * @param request 请求参数
     * @return 操作成功
     */
    String assignUsers(RoleUserRequest request);

    /**
     * 查询单个角色信息
     *
     * @param request 角色信息
     * @return 角色信息
     */
    RoleVO queryOne(RoleQueryRequest request);

    /**
     * 获取角色关联的资源列表
     *
     * @param request 请求参数
     * @return 分页结果
     */
    Page<Resource> pageQueryAssignedResources(RoleQueryRequest request);

    /**
     * 绑定权限到角色
     *
     * @param request 请求参数
     * @return 操作成功
     */
    String configResources(RoleResourceRequest request);

    /**
     * 判断是否超级管理员
     *
     * @param handler 用户昵称
     * @return true/false
     */
    boolean isSuperAdmin(String handler);

    /**
     * 导出角色
     *
     * @param request 请求参数
     * @return 操作成功
     */
    String export(RoleOpRequest request);
}
